// 复制到剪贴板的方法
import 'dart:convert';

import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:study_demo/base/BaseController.dart';

const countries = ['中国', '韩国', '日本', '澳大利亚', '德国', '美国'];

Future<void> copyToClipboard(String text) async {
  await Clipboard.setData(ClipboardData(text: text)); // 设置剪贴板数据
  toast('复制成功');
}

firstWordToUpper(String text) {
  return text.substring(0, 1).toUpperCase() + text.substring(1);
}

String decodeUnicode(String unicodeStr) {
  return String.fromCharCodes(
      unicodeStr.codeUnits.where((element) => element != '\\').map((codeUnit) {
    if (codeUnit == 'u'.codeUnitAt(0)) {
      // 下一个四位数字是Unicode值
      int nextCharCode = int.parse(
          unicodeStr.substring(unicodeStr.indexOf(codeUnit.toString()) + 1,
              unicodeStr.indexOf(codeUnit.toString()) + 5),
          radix: 16);
      return nextCharCode;
    } else {
      return codeUnit;
    }
  }));
}

/// url是否合法
bool isValidUrl(String url) {
  return url.startsWith('http');
}

// bool isValidUrl(String url) {
//   final uri = Uri.tryParse(url);
//
//   // 检查是否为null（无效的URL）或者不是绝对URL
//   if (uri == null || !uri.isAbsolute) return false;
//
//   // 验证URL的基本组成部分
//   bool hasScheme = uri.scheme.isNotEmpty; // 是否有scheme（例如http, https）
//   bool hasHost = uri.host.isNotEmpty; // 是否有主机名
//   bool hasPort = uri.port > 0; // 是否有端口号
//   bool hasPath = uri.path.isNotEmpty; // 是否有路径
//   bool hasQuery = uri.query.isNotEmpty; // 是否有查询字符串
//
//   // 根据需要定义URL的必要组成部分
//   // 例如：一个合法的URL至少应该包含scheme和host
//   return hasScheme && hasHost;
// }

StringTrim(Object s) {
  return s.toString().trim();
}

bool isValidJson(String data) {
  try {
    jsonDecode(data);
    return true;
  } on FormatException {
    return false;
  }
}

String formatDate(DateTime? dateTime, {int type = 0}) {
  return DateUtil.formatDate(dateTime,
      format: type == 0
          ? DateFormats.y_mo_d
          : type == 1
              ? DateFormats.y_mo
              : DateFormats.full);
}

final Map<int, Color> colorMapper = {
  0: Colors.white,
  1: Colors.blueGrey[50]!,
  2: Colors.blueGrey[100]!,
  3: Colors.blueGrey[200]!,
  4: Colors.blueGrey[300]!,
  5: Colors.blueGrey[400]!,
  6: Colors.blueGrey[500]!,
  7: Colors.blueGrey[600]!,
  8: Colors.blueGrey[700]!,
  9: Colors.blueGrey[800]!,
  10: Colors.blueGrey[900]!,
};

extension ColorUtil on Color {
  Color byLuminance() =>
      computeLuminance() > 0.4 ? Colors.black87 : Colors.white;
}
